#include <iostream>
using namespace std;

template <int p> class ZZe;

template <int p> class ZZ {
	public:
			typedef ZZe<p> Element;
			static Element add(const Element& op1, const Element& op2) {return (op1._val+op2._val);}
};

template <int p> class ZZe {
		public:
				ZZe(const int& i ): __val(i % p){};
		private:
           int __val;
};

int main(){
    typedef ZZ<3>::Element Z3e;
    typedef ZZ<5>::Element Z5e;
	Z3e a(2),b(1);
	// cout << ZZ<3>::add(a,b) << endl;
	return 0;
}
